﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Qas.CommonLogic;

namespace Qas.CommonLogic.BusinessObjects
{
    /// <summary>
    /// База знаний
    /// </summary>
    public partial class Base
    {
        private List<Condition> availableConditions;

        private List<Task> availableTasks;

        private List<Competence> availableCompetences;
        public static Base CurrBase;

        public Base()
        {
            CurrBase = this;
        }

        //public void ConnectConditions()
        //{
        //    foreach (Task taskItem in this.AvailableTasks)
        //    {
        //        foreach (Condition cond in taskItem.PostConditions)
        //        {
        //            cond.ProducingTasks.Add(taskItem);
        //        }
        //    }
        //}

        /// <summary>
        /// Наличествующие в базе условия
        /// </summary>
        [System.Xml.Serialization.XmlIgnore()]
        public List<Condition> AvailableConditions
        {
            get
            {
                if (this.availableConditions == null)
                {
                    this.availableConditions = this.ConditionList.ToList<Condition>();
                }

                return this.availableConditions;
            }
        }

        /// <summary>
        /// Наличествующие в базе задачи
        /// </summary>
        [System.Xml.Serialization.XmlIgnore()]
        public List<Task> AvailableTasks
        {
            get
            {
                if (this.availableTasks == null)
                {
                    this.availableTasks = this.TaskList.ToList<Task>();
                }

                return this.availableTasks;
            }
        }

        /// <summary>
        /// Имеющиеся в базе компетенции
        /// </summary>
        [System.Xml.Serialization.XmlIgnore()]
        public List<Competence> AvailableCompetences
        {
            get
            {
                if (this.availableCompetences == null)
                {
                    this.availableCompetences = this.CompetenceList.ToList<Competence>();
                }
                return this.availableCompetences;
            }
            set
            {
                this.availableCompetences = value;
            }
        }

        /// <summary>
        /// По заданному идентификатору находит в базе задачу
        /// </summary>
        /// <param name="id">Идентификатор искомой задачи</param>
        /// <returns>Найденная задача или null в 
        /// случае, когда такой задачи нет</returns>
        public Task GetTaskById(int id)
        {
            foreach (Task task in this.AvailableTasks)
            {
                if (task.ID == id)
                    return task;
            }

            return null;
        }

        /// <summary>
        /// По заданному идентификатору находит в базе условие
        /// </summary>
        /// <param name="id">Идентификатор искомого условия</param>
        /// <returns>Найденная задача или null в 
        /// случае, когда такой задачи нет</returns>
        public Condition GetConditionById(int id)
        {
            foreach (Condition cond in CurrBase.AvailableConditions)
            {
                if (cond.ID == id)
                    return cond;
            }

            return null;
        }
    }
}
